package com.docmgmt.mvp.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 角色实体（v3.0新增）
 *
 * RBAC系统核心表：4级角色层次
 * - member (level=1): 普通成员
 * - dept_admin (level=5): 部门管理员
 * - senior_manager (level=7): 高级经理
 * - system_admin (level=10): 系统管理员
 *
 * @TableName sys_role
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sys_role")
public class RoleEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /** 角色代码（唯一标识，如member、dept_admin） */
    @TableField("role_code")
    private String roleCode;

    /** 角色名称（如"普通成员"、"部门管理员"） */
    @TableField("role_name")
    private String roleName;

    /** 角色等级（1/5/7/10，数值越大权限越高） */
    @TableField("role_level")
    private Integer roleLevel;

    /** 父角色代码（用于权限继承链） */
    @TableField("parent_role_code")
    private String parentRoleCode;

    @TableField("description")
    private String description;

    /** 是否为系统内置角色（不可删除） */
    @TableField("is_system")
    private Boolean system;

    @TableLogic
    @TableField("is_deleted")
    private Boolean deleted;

    @TableField(value = "created_at", fill = FieldFill.INSERT)
    private LocalDateTime createdAt;

    @TableField(value = "updated_at", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedAt;
}
